﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace RemotingMessage
{
    [ServiceContract(CallbackContract = typeof(IConference))]
    public interface IConference
    {
        #region I/O Methods
        [OperationContract(IsOneWay = true)]
        void Join(string userName, string machineName, string softwareVersion, string strIpAddres);

        [OperationContract(IsOneWay = true)]
        void Leave(string userName);

        [OperationContract(IsOneWay = true)]
        void Ping();

        [OperationContract(IsOneWay = true)]
        void PingRequest(string userName, string machineName, string softwareVersion, string strIpAddres);

        [OperationContract(IsOneWay = true)]
        void ActiveClientList(List<ClientInfo> clientList);
        #endregion

        #region Communication Methods
        [OperationContract(IsOneWay = true)]
        void TextMessage(string From, List<string> To, string strMessage);
        [OperationContract(IsOneWay = true)]
        void VideoSample(SendBytes sb);
        [OperationContract(IsOneWay = true)]
        void AudioSample(SendBytes sb);
        [OperationContract(IsOneWay = true)]
        void AudioIPSample(SendBytes sb);
        [OperationContract(IsOneWay = true)]
        void TimeSignal(string From, DateTime Time);
        [OperationContract(IsOneWay = true)]
        void TimeSignalRequest();
        [OperationContract(IsOneWay = true)]
        void VideoIPSample(SendBytes message);
        [OperationContract(IsOneWay = true)]
        void DeviceControlLights(string From, byte[] btLights);

        [OperationContract(IsOneWay = true)]
        void BeginCall(string From, string To);

        [OperationContract(IsOneWay = true)]
        void CancelCall(string From, string To);

        [OperationContract(IsOneWay = true)]
        void StartConference(string From, string To);

        [OperationContract(IsOneWay = true)]
        void StopConference(string From, string To);
        #endregion
    }

    public interface IConferenceChannel : IConference, IClientChannel { }
}
